/* @Description:midway-back/src/utilsu-object.ts @author:378237242@qq.com @date:2023/11/20 */

/**
 * 用于排除对象中的私有属性
 * @param obj
 */
const excludePrivateProperties = function <T extends Record<string, any>>(
  obj: T
): Omit<T, keyof T> {
  // 使用Object.entries()方法，将对象转换为键值对数组
  return Object.entries(obj).reduce(
    // 使用reduce()方法，遍历数组，并返回一个新的对象
    (acc, [key, value]) => {
      // 如果key不以"_"开头，则将该键值对添加到新对象中
      if (!key.startsWith('_')) {
        acc[key] = value;
      }
      // 返回新对象
      return acc;
    },
    // 初始值为一个空对象
    {} as Omit<T, keyof T>
  );
};

export { excludePrivateProperties };
